Android Data Binding
what:
通常、UIの値を読み書きするには、xmlで作った(inflate)したviewの属性(textなど)にコード上で値を入れる.
これを、xml上の記述とcode上の変数を対応させる。Bindingする。
Binding#viewModel = mViewModelみたいな形で layout全体とViewModelを関連付けられる
ObservableなViewModelにする...まだ分かってない #TODO How:
1.app/build.gradleで、android{ dataBinding{ enabled = true } }
2. layoutファイルを、<layout><data><variable name=変数名 type=CLASSNAME>として、
配下のViewのtext属性などでその変数を参照する
3. Fragment, Activity
fragment上, onCeateView()で、binderでwrap?したrootのViewで返せばよい。
code: data_bingind.kt
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false)
return binding.root
Activityの場合は、従来のActivity#setContentViewの代わりに、DataBindingUtil.setContentViewを使う。
onClickで、イベントハンドラーを参照させることもできる
recyclerViewでは?
@BindingAdapterのannotationで、独自のbindingadaperができる?
bindingAdapterとは。この data binding. adapterパターンをしてる。
xmlの(view記述の)属性部分android:text="aaa" ここがbindingで、ここで独自?の (bindingした)属性を書ける
最初にイメージを掴む。
実装対象のファイルはたったの3つです。とてもシンプルですが、DataBindingの概要を掴むには問題ないと思います。
activity_main.xml(View)
MainActivity.kt(View)
MainViewModel.kt(ViewModel)
class MainViewModel: BaseObservable() {
みんないろんなこといってる... 特定しにくいエラーなのか?
cannot find でsymbolが見つからない、みたいなエラーだった。
clean buildしてからもだめ、
com.mydomain.Model.Hoge みたいなパス名だったのを、
com.mydomain.model.Hoge みたいに modelと小文字にしたら、buildが通った...良くわからない
Use the standard bindings when possible
make your custom binding adapters efficeint
maxLinesTOggle は便利そう。本題とはずれるけど。
Be careful with what you're providing as variables
So what can you do instead?
Small wins add up